ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseアーキテクチャ概要
リリース6.0
B25763-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

索引付けテクニック

TimesTen問合せオプティマイザは、索引を使用して問合せの実行を高速化します。オプティマイザでは、SELECT、INSERT SELECT、UPDATEまたはDELETE文を準備する際に、既存の索引を使用して、あるいは必要に応じて一時索引を作成して、最適な実行計画を生成します。

索引とは、表の行の位置を示すキーのマップです。TimesTenシステムから最大のパフォーマンスを引き出すには、索引を戦略的に使用することが必須になります。

TimesTenでは、次の2種類の索引付けテクニックを使用します。

ハッシュ索引

1つ以上の列にPRIMARY KEYまたはUNIQUE HASHオプションを指定して、CREATE TABLE文で表を作成すると、ハッシュ索引がTimesTenによって自動的に作成されます。主キー列はNULLにできません。また、ハッシュ索引は各表に1つのみ許可されます。

CREATE TABLE文のPAGESパラメータで、表のハッシュ索引に割り当てるバケット数を指定します。ハッシュ索引のバケットが少ないと、ハッシュ衝突が多くなります。バケットが多くなると衝突は少なくなりますが、メモリーを浪費する可能性があります。ハッシュ・キーの比較は高速処理のため、ハッシュ衝突が少ない場合は、パフォーマンスに重大な影響が及ぶことはありません。

Tツリー索引

メイン・メモリー・データ管理システムは、メモリー要件を軽減することと、コード・パスおよびフットプリントを縮小することを目的に設計されています。従来のディスク・ベースのRDBMSでは、B+ツリー索引を使用して、データ・ファイルの索引参照に必要なディスクI/Oの量を削減します。TimesTenでは、メイン・メモリー・アクセスの最適化を行うTツリー索引を使用します。Tツリー索引はBツリー索引より経済的で、必要とするメモリー領域とCPUサイクルは少なくなります。

Tツリーは、各索引ノードの左端の値のみを保持することで、領域要件を軽減します。その他の値には、データ行自体にアクセスすることでアクセスできます。索引ツリー構造はすべてメモリー常駐のため、TツリーにディスクI/Oはありません。Tツリーでは不要な計算を排除し、可能なかぎりポインタ走査を利用することで、コードの複雑さを軽減し、コード・パス長を短縮します。

CREATE INDEX文を使用して、表にTツリー索引を作成します。Tツリー索引は、表への行の挿入前または挿入後のいずれかで作成できます。各CREATE INDEX文では、索引キーとして使用する列を1つ以上記述します。複数の列を記述した場合、リスト内の最初の列が、索引キーのソート順序で最優先されます。

TimesTenではTツリー索引を作成して、外部キー制約に対して一意列制約を施行します。

図6.2に、索引キーとして指定された列に、値58を含む行の範囲を検索するために使用される検索パスを示します(この列は唯一の索引キーであるか、またはソート順序の先頭にあります)。

図6.2 Tツリー・ノード

図6.2に示すように、TツリーはTツリー・ノードのグループで構成されます。各ノードは64個の索引キーのグループで構成され、各キーは個別の表の行を示しています。Tツリー・ノードは、検索パスの最初のノードであるルート・ノードで開始されます。その他のノードは、高い方の値が右に分岐し、低い方の値が左に分岐するように、ルート・ノードから均等に分散されます。このように、Tツリー検索アルゴリズムでは、2度比較するのみで、検索中の値が現在のノードに存在するのか、メモリー内の他の場所に存在するのかがわかります。すべての新しい索引ノードのポインタ間接化によって、その検索領域は2つに分けられます。